home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / SmallEiffel 0.3.3 / SmallEiffel PPC / lib_show / parking / date.e < prev    next >
Encoding:
Text File  |  1996-06-13  |  2.1 KB  |  117 lines  |  [TEXT/EDIT]

  1. -- Part of SmallEiffel -- Read DISCLAIMER file -- Copyright (C) 
  2. -- Dominique COLNET and Suzanne COLLIN -- colnet@loria.fr
  3. --
  4. class DATE
  5.    
  6. inherit 
  7.    ANY 
  8.       redefine print_on
  9.       end;
  10.    
  11. creation {ANY}
  12.    make
  13.  
  14. feature {ANY}
  15.    
  16.    print_on(file: STD_FILE_WRITE) is
  17.       do
  18.      file.put_string("day : ");
  19.      file.put_integer(day);
  20.      file.put_string(" minute : ");
  21.      file.put_integer(min);
  22.       end; 
  23.    
  24.    minutes_to(after: DATE): INTEGER is
  25.      -- Count of minutes to go to `after'. 
  26.       require
  27.      after >= Current
  28.       do
  29.      Result := ((after.day - day) * 24 * 60 + (after.min - min));
  30.       ensure
  31.      Result >= 0;
  32.       end;
  33.    
  34.    day_night_to(d2: DATE): ARRAY[INTEGER] is
  35.      -- Result @ Result.lower : Night time.
  36.      -- Result @ Result.upper : Day time.
  37.       require
  38.      d2 >= Current
  39.       local
  40.      min_jour, min_nuit: INTEGER;
  41.      save_day, save_min: INTEGER;
  42.       do
  43.      from  
  44.         save_day := day;
  45.         save_min := min;
  46.      until
  47.         is_equal(d2)
  48.      loop
  49.         if day_time then
  50.            min_jour := min_jour + 1;
  51.         else
  52.            min_nuit := min_nuit + 1;
  53.         end;
  54.         add_time(1);
  55.      end;
  56.      day := save_day;
  57.      min := save_min;
  58.      Result := <<min_jour,min_nuit>>
  59.       ensure
  60.      Result.count = 2;
  61.      (Result @ 1) + (Result @ 2) = minutes_to(d2)
  62.       end;
  63.    
  64.    infix ">=" (d2: like Current): BOOLEAN is
  65.       require
  66.      d2 /= Void
  67.       do
  68.      Result := (day > d2.day) or else
  69.            ((day = d2.day) and then (min >= d2.min));
  70.       end
  71.    
  72.    day_time: BOOLEAN is
  73.      -- Is it Sunny ?
  74.       do
  75.      Result := (min >= 6*60) and (min <= 22*60);
  76.       end;
  77.    
  78.    nigth_time: BOOLEAN is
  79.      -- Is it the night ?
  80.       do
  81.      Result := not day_time;
  82.       end;
  83.  
  84. feature {ANY} -- Modifications :
  85.    
  86.    make(vday, vmin: INTEGER) is
  87.       do
  88.      day := vday;
  89.      min := vmin;
  90.       ensure
  91.      day = vday;
  92.      min = vmin;
  93.       end;
  94.    
  95.    add_time(nb_min: INTEGER) is
  96.       do
  97.      min := min + nb_min;
  98.      if min > (24*60) then
  99.         day := day + (min // (24*60));
  100.         min := min \\ (24*60);
  101.      end;
  102.       end;
  103.    
  104. feature {DATE}
  105.    
  106.    day, min : INTEGER;
  107.  
  108. invariant
  109.    
  110.    day >= 0;
  111.    
  112.    min >= 0;
  113.    
  114.    min < 24 * 60;
  115.  
  116. end -- class DATE
  117.